/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ia_psr.datos;

/**
 *
 * @author Rubén Avalos Elvira y Fabiana Celiberti Tapie
 */
public class Horario {
    public int horaInicio;
    public int minutoInicio;
    public int horaFin;
    public int minutoFin;

    public int duracion;
    public boolean programada;

    public Horario(int horaInicio, int minutoInicio, int horaFin, int minutoFin) {
        this.horaInicio   = horaInicio;
        this.minutoInicio = minutoInicio;
        this.horaFin      = horaFin;
        this.minutoFin    = minutoFin;

        duracion = (horaFin - horaInicio); // simplificacion: consideramos solo horas
        programada = true;
    }

    public Horario(int duracion) {
        this.duracion = duracion;
        this.horaInicio   = -1;
        this.minutoInicio = -1;
        this.horaFin      = -1;
        this.minutoFin    = -1;
        programada = false;
    }

    public Horario(Horario h) {
        horaInicio   = h.horaInicio;
        minutoInicio = h.minutoInicio;
        horaFin      = h.horaFin;
        minutoFin    = h.minutoFin;
        duracion     = h.duracion;
        programada   = h.programada;
    }
    public boolean programada() {
        return programada;
    }

    public boolean seSolapan(Horario h) {
        int hi1 = horaInicio;
        int hf1 = horaFin;
        int hi2 = h.horaInicio;
        int hf2 = h.horaFin;
        return
                (hi1 == hi2 && hf1 == hf2)               ||
                (hi1 > hi2 && hf1 > hf2 && hi1 < hf2) ||
                (hi1 < hi2 && hf1 < hf2 && hf1 > hi2) ||

                (hi1 < hi2 && hf1 > hf2 ) || // la primera desborda a la segunda
                (hi1 > hi2 && hf1 < hf2 ) || // la segunda desborda a la primera

                (hi1 >= hi2 && hf1 <= hf2)||
                (hi1 <= hi2 && hf1 >= hf2);
    }

    public int compareTo(Object o) {
        if (o instanceof Horario) {            
            Horario h = (Horario)o;            
            if (horaInicio < h.horaInicio)
                return -1;
            else if (horaInicio > h.horaInicio)
                return 1;
        }
        return 0;
    }

    public static int tiempoEntreHorarios(Horario h1, Horario h2) {
        return Math.abs(h2.horaInicio - h1.horaFin);
    }

    public String toString() {
        return horaInicio + " - " + horaFin + ", duracion: " + duracion;
    }
}

